package com.itheima.controller;

import com.itheima.anno.Log;
import com.itheima.pojo.Dept;
import com.itheima.pojo.Result;
import com.itheima.service.DeptService;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.*;

import java.util.List;
import java.util.logging.Logger;

/**
 * 部门管理控制层
 */
//定义自动创建日志对象的注解-@Slf4j
@Slf4j
//定义RequestMapping注解，用来优化请求路径和方法
@RequestMapping("/depts")
@RestController   //标记该类为控制器 并将其中方法的返回值直接以JSON或者XML的形式响应给客户端
@Api(tags = "部门相关接口")
public class DeptController {
    //定义一个日志对象，用来返回日志信息
//    private static Logger log=Logger.getLogger(DeptController.class.getName());

    //依赖注入
    @Autowired
    //定义要注入的业务层对象
    private DeptService deptService;

    /**
     * 1.查询部门列表
     * @return
     */

    //定义请求方式和路径
//    @RequestMapping(value = "/depts",method = RequestMethod.GET)    //指定请求方式为GET  第一种方法 局限太大
    @GetMapping   //指定请求方式为GET 第二种方法
    @ApiOperation("查询部门列表")
    //定义部门查询的功能接口
    public Result list(){
        //返回日志信息
        log.info("查询全部部门信息");

        //调用业务层查询全部部门信息
        List<Dept> deptList =deptService.list();

        return Result.success(deptList);   //返回响应成功的结果
    }

    /**
     * 根据ID删除部门
     */
    //定义删除部门的请求方式和请求路径
    @DeleteMapping("/{id}")
    @ApiOperation("根据ID删除部门")
    @Log
    //定义删除部门的接口
    public Result delete(@PathVariable Integer id){
        //记录日志信息
        log.info("根据id删除部门：{}",id);

        deptService.delete(id);

        return Result.success();
    }

    /**
     * 新增部门
     */
    //定义请求方式和路径
    @PostMapping
    @ApiOperation("新增部门")
    @Log
    //定义新增部门的接口
    public Result add(@RequestBody Dept dept){
        //记录日志信息
        log.info("新增部门：{}",dept);

        deptService.add(dept);

        return Result.success();
    }

    /**
     * 根据ID查询部门
     */
    //定义请求方式和路径
    @GetMapping("/{id}")
    @ApiOperation("根据ID查询部门")
    public Result select(@PathVariable Integer id){
        //记录日志信息
        log.info("根据ID查询部门：{}",id);

        //将根据id查询到的部门信息封装到List集合中 并响应到前端
        Dept dept = deptService.select(id);

        //返回响应结果
        return Result.success(dept);
    }

    /**
     * 修改部门
     */
    //定义请求方式和路径
    @PutMapping
    @ApiOperation("修改部门")
    @Log
    //定义修改部门的功能接口
    public Result update(@RequestBody Dept dept){   //通过@RequestBody注解，将请求体中JSON格式的数据封装到Dept对象中
        //记录日志信息
        log.info("修改部门：{}",dept);

        //判断ID是否为空
        if(dept.getId()==null){
            //如果ID为空，则返回错误信息
            return Result.error("ID不能为空");
        }

        boolean success=deptService.edit(dept);

        if (success){
            return Result.success();
        }else {
            return Result.error("修改失败,部门不存在");
        }
    }

}
